package cn.edu.xjtu.android.emoji_warfare_android.engine.worker;

/**
 * DelayedOperation<br>
 * 可延迟的操作<br>
 * 出现的目的是将一些有延迟效果的操作封装为一类，包括：<br>
 * BulletGroup、技能等。<br>
 * 主要用法：<br>
 * 1.继承此类，覆写run方法，处理需要做的事情(包括调整delayMillis，实现某些特效)<br>
 * 2.交由DelayedWorker来处理
 * 
 * @author bill
 *
 */
public abstract class DelayedOperation {
    /**
     * 记录上一次操作的时间
     */
    public long last;
    /**
     * 延迟时间，可以中途修改，实现某些特效
     */
    private long delayMillis;

    /**
     * 构建一个延迟操作
     */
    public DelayedOperation() {
        this(0);
    }

    /**
     * 构造一个延迟操作
     * 
     * @param delayMillis
     *            两次操作时间的时间间隔
     */
    public DelayedOperation(long delayMillis) {
        this.delayMillis = delayMillis;
        last = 0;
    }

    /**
     * 需要延迟的操作，其中可以包括修改下一次延迟的时间<br>
     * 返回值标志所有任务是否结束，返回值为真时Worker不再处理该延迟操作<br>
     * 
     * @return Worker需要删除该对象返回true，否则返回false
     */
    public abstract boolean run();

    /**
     * 获取延迟时间(单位毫秒)
     * 
     * @return 延迟时间
     */
    public long getDelayMillis() {
        return delayMillis;
    }

    /**
     * 设置延迟时间(单位毫秒)
     * 
     * @param delayMillis
     *            延迟时间
     */
    public void setDelayMillis(long delayMillis) {
        this.delayMillis = delayMillis;
    }
}
